<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
          "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">

<head>
  <meta http-equiv="Content-Type"
        content="text/html; charset=utf-8">
  <meta http-equiv="Content-Style-Type"
        content="text/css">
  <meta http-equiv="Content-Script-Type"
        content="text/javascript">
  <meta name="description"
        content="FreeType Documentation - Design - Introduction">
  <meta name="Author"
        content="David Turner">

  <link rel="icon"
        href="../image/favicon_-90.ico">
  <link rel="shortcut icon"
        href="../image/favicon_-90.ico">
  <link rel="stylesheet"
        type="text/css"
        href="../css/freetype2_-90.css">

  <script type="text/javascript"
          src="../../../js/freetype2.js">
  </script>

   <title>FreeType Design | Introduction</title>
</head>


<body>

<div id="top"
     class="bar">
  <h1><a href="http://freetype.org/index.html">FreeType</a> Design</h1>
</div>


<div id="wrapper">

<div class="colmask leftmenu">
  <div class="colright">
    <div class="col1wrap">
      <div class="col1">


        <!-- ************************************************** -->

        <div id="introduction">
          <h2>Introduction</h2>

          <p>This document provides details on the design and
            implementation of the FreeType&nbsp;2 library.  Its goal
            is to help developers better understand how
            FreeType&nbsp;2 is organized, in order to let them extend,
            customize, and debug it.</p>

          <p>Before anything else, it is important to understand the
            <em>purpose</em> of this library, i.e., why it has been
            written.</p>

          <ul>
            <li>
              <p>It allows client applications to <em>access font
                files easily</em>, wherever they could be stored, and
                as independently of the font format as possible.</p>
            </li>
            <li>
              <p>Easy <em>retrieval of global font data</em> most
                commonly found in normal font formats (i.e., global
                metrics, encoding/charmaps, etc.).</p>
            </li>
            <li>
              <p>It allows easy <em>retrieval of individual glyph
                data</em> (metrics, images, name, anything else).</p>
            </li>
            <li>
              <p><em>Access to font format-specific
                &lsquo;features&rsquo;</em> whenever possible (e.g.,
                SFNT tables, Multiple Masters, OpenType layout tables,
                font variations, etc.).</p>
            </li>
          </ul>

          <p>Its design has also severely been influenced by the
            following requirements.</p>

          <ul>
            <li>
              <p><em>High portability</em>.  The library must be able
                to run on any kind of environment.  This requirement
                introduces a few drastic choices that are part of
                FreeType&nbsp;2's low-level system interface.</p>
            </li>
            <li>
              <p><em>Extendability</em>.  New features should be added
                with the least modifications in the library's code
                base.  This requirement induces an extremely simple
                design where nearly all operations are provided by
                modules or services.</p>
            </li>
            <li>
              <p><em>Customization</em>.  It should be easy to build a
                version of the library that only contains the features
                needed by a specific project.  This really is
                important when you need to integrate it into a font
                server for embedded graphics libraries, say.</p>
            </li>
            <li>
              <p><em>Compactness</em> and <em>efficiency</em>.  The
                primary target for this library originally were
                embedded systems with low CPU and memory resources.
                Today, however, memory constraints are much less
                strict, and the focus of development shifted to
                support as much font features as possible.</p>
            </li>
          </ul>

          <p>The rest of this document is divided in several sections.
            First, a few chapters will present the library's basic
            design as well as the objects and data managed internally
            by FreeType&nbsp;2.</p>

          <p>It is intended to eventually add sections that cover
            library customization, relating to topics as
            system-specific interfaces, how to write your own modules
            or services and how to tailor library initialization and
            compilation to your needs.  Those sections are not written
            yet, however.</p>
        </div>

         <!-- ************************************************** -->

        <div class="updated">
          <p>Last update: 13-Feb-2018</p>
        </div>
      </div>
    </div>


    <!-- ************************************************** -->

    <div class="col2">
    </div>
  </div>
</div>


<!-- ************************************************** -->

<div id="TOC">
  <ul>
    <li class="funding">
      <form action="https://www.paypal.com/cgi-bin/webscr"
            method="post"
            target="_top">
        <input type="hidden"
               name="cmd"
               value="_s-xclick">
        <input type="hidden"
               name="hosted_button_id"
               value="SK827YKEALMT4">
        <input type="submit"
               value="Donate"
               name="submit"
               alt="PayPal - The safer, easier way to pay online!">
      </form>
    </li>
    <li class="primary">
      <a href="http://freetype.org/index.html">Home</a>
    </li>
    <li class="primary">
      <a href="http://freetype.org/index.html#news">News</a>
    </li>
    <li class="primary">
      <a href="../index.html">Overview</a>
    </li>
    <li class="primary">
      <a href="../documentation.html">Documentation</a>
    </li>
    <li class="primary">
      <a href="http://freetype.org/developer.html">Development</a>
    </li>
    <li class="primary">
      <a href="http://freetype.org/contact.html"
         class="emphasis">Contact</a>
    </li>

    <li>
      &nbsp; <!-- separate primary from secondary entries -->
    </li>

    <li class="secondary">
      <a href="index.html">FreeType Design</a>
    </li>
    <li class="tertiary">
      <a href="design-1.html" class="current">Introduction</a>
    </li>
    <li class="tertiary">
      <a href="design-2.html">Components and APIs</a>
    </li>
    <li class="tertiary">
      <a href="design-3.html">Public Objects and Classes</a>
    </li>
    <li class="tertiary">
      <a href="design-4.html">Internal Objects and Classes</a>
    </li>
    <li class="tertiary">
      <a href="design-5.html">Module Classes</a>
    </li>
    <li class="tertiary">
      <a href="design-6.html">Interfaces and Services</a>
    </li>
  </ul>
</div>

</div> <!-- id="wrapper" -->

<div id="TOC-bottom">
</div>

</body>
</html>
